/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ebe.controller;

import javax.faces.model.DataModel;
import ebe.model.Usuario;
import ebe.model.Telefones;
import ebe.model.Referencias;
import ebe.dao.UsuarioDAO;
import ebe.dao.DB;
import java.sql.SQLException;
import java.sql.Date;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 *
 * @author Ramayane
 */
public class ControladorUsuario {

    private Usuario usuario = new Usuario();
    private Telefones telefone;
    private Referencias referencia;
    private DataModel model;
    private boolean logado;

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the telefone
     */
    public Telefones getTelefone() {
        return telefone;
    }

    /**
     * @param telefone the telefone to set
     */
    public void setTelefone(Telefones telefone) {
        this.telefone = telefone;
    }

    /**
     * @return the referencia
     */
    public Referencias getReferencia() {
        return referencia;
    }

    /**
     * @param referencia the referencia to set
     */
    public void setReferencia(Referencias referencia) {
        this.referencia = referencia;
    }

    //METODOS PARA MANIPULACAO DE DADOS DO USUARIO
    public String atualizarUsuario() throws SQLException {
        UsuarioDAO usu = new UsuarioDAO();
        DB db=new DB();
        usu.atualizar(db, usuario);
        return "cadastroAtualizado";
    }

    public String editarUsuario() {
        Usuario u = getUsuario();
        setUsuario(u);
        return "editarUsuario";
    }

    public static Usuario usuarioLogado() {
        ControladorUsuario controlador = (ControladorUsuario) FacesContext.getCurrentInstance().
                getExternalContext().
                getSessionMap().
                get("controlUsuario");
        return controlador.getUsuario();
    }

    public String excluirUsuario() throws SQLException {
        DB db=new DB();
        UsuarioDAO usu = new UsuarioDAO();
        Usuario usuario = getUsuario();
        usu.excluir(db, usuario);
        logado=false;
        this.setUsuario(new Usuario());
        return "usuarioExcluido";
    }

    public String novoUsuario() {
        Date nasc = new Date(new java.util.Date().getTime());
        this.setUsuario(new Usuario());
        //this.setUsuario(new Usuario("123", "321", "Ana", nasc, "Feminino", "Superior", "GO", "Cidade", "rua 1", "email", "desc", null));
        logado = false;
        return "novoUsuario";
    }

    public String incluirUsuario() throws SQLException {
        DB db = null;
        try {
            db = new DB();
            UsuarioDAO usu = new UsuarioDAO();
            usu.salvar(db, usuario);
            logado = true;
            return "cadastroRealizado";
        } finally {
            if (db != null) {
                db.close();
            }
        }
    }

    public boolean getLogado() {
        return logado;
    }

    public String autenticar() throws SQLException {
        FacesContext context = FacesContext.getCurrentInstance();
        logado = false;
        DB db = new DB();
        try {
            UsuarioDAO dao = new UsuarioDAO();
            Usuario usr = dao.pegaUsuarioPeloCPF(db, usuario.getCpf());

            if (usr != null && usr.getSenha().equals(usuario.getSenha())) {
                usuario = usr;
                logado = true;
                return "logado";
            }
        } finally {
            db.close();
        }

        FacesMessage message = new FacesMessage("Usuario ou senha invalidos");
        context.addMessage("frmLogin", message);
        return "falha";
    }

    public String logout() throws SQLException {
        logado = false;
        usuario = new Usuario();
        return "logout";
    }
}
